perm filename PQ[HAK,HPM] blob sn#035413 filedate 1974-05-24 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE PEEKER
C00005 00003	DEVNAM←←0
C00008 00004	BUFPNT:	MOVE E,DEVCHR(DDB)
C00011 00005	SIXOUT:	MOVEI C,6
C00013 ENDMK
C⊗;
TITLE PEEKER

A←1
B←2
C←3
D←4
E←5
F←6
G←7
H←10

DAT←12
SPACE←13
DDB←14
PTR←15
I←16
P←17

PDLLEN←←100

TTYTAB←←220
DEFINE PEEK(AC,ADDR)
<	MOVEI AC,ADDR
	CALL AC,['PEEK  ']
>

LOC 124
REE
RELOC

PDL:	BLOCK PDLLEN

STRT:	CALLI
	PEEK A,221
	MOVE B,[POINT 9,A]
	SETZM MAXTTY#
	ILDB C,B
	ADDM C,MAXTTY
	TLNE B,770000
	JRST .-3
	OUTSTR[ASCIZ/TTY #?/]
	SETZ A,
INLOP:	INCHWL B
	CAIN B,15
	JRST INLOP
	CAIL B,"0"
	CAILE B,"7"
	JRST LAST
	IMULI A,10
	ADDI A,-60(B)
	JRST INLOP
LAST:	CAMGE A,MAXTTY
	CAIE B,12
	JRST [	CLRBFI
		OUTSTR[ASCIZ/HO HO!
/]
		JRST STRT]
	MOVEM A,TAB#
	PEEK A,TTYTAB
	ADDM A,TAB		;LOC OF TTYTAB ENTRY
	SETZM FLAG
REE:	PEEK A,37		;GET RMEMSIZ-1
	HRLZ A,A
	JUMPGE A,.+2
	HRRI A,540000
	CALL A,['SETPR2']
	HALT STRT
	MOVEI A,-400000(A)
	MOVNM A,TENADR#
	SPCWAR 'SSW'
	SETZM DONE
	SETO A,
	TTYUUO 6,A
	CAME A,[-1]
	TLNN A,420000
	JRST [	SETOM NODPY#
		OUTSTR[ASCIZ/I OR O?/]
		INCHRW A
		SETZM FLAG
		CAIE A,"I"
		SETOM FLAG
		MOVE A,[400000,,SPW]
		CALLI A,400003
		OUTSTR HEADER
		OUTSTR TEXT
		CALLI 1,12]
	SETZM NODPY
	TLNE A,20000
	HLLOS NODPY
	MOVEI A,DPYBUF
	SKIPE NODPY
	JRST [	MOVE A,DDWRD1
		MOVEM A,DPYBUF
		MOVE A,DDWRD2
		MOVEM A,LINSET
		JRST WRDDON]
	SETZM DPYBUF
	MOVE A,IIIWRD
	MOVEM A,LINSET
WRDDON:	MOVE A,[400017,,SPW]
	CALLI A,400003		;START SPACEWAR
	PPACT 0			;SHUT OFF PAGE PRINTER
	INCHWL
	CLRBFI
	SETCMM FLAG#
	JRST .-3
DEVNAM←←0
DEVCHR←←1
DEVIOS←←2
DEVMOD←←4
DEVLOG←←5
DEVBUF←←6
ACTBTS←←11
TTIBUF←←16
TTOBUF←←25
TISYNC←←24

BUF←←0
PUTR←←1
TAKR←←3

DEFINE INC(N)
<	REPEAT N,<IDPB SPACE,PTR
>>

DEFINE PUT(CHR)
<	MOVEI A,CHR
	IDPB A,PTR
>

SPW:	AOSL YET#
	SKIPE DONE
	CALLI 400024		;NOT DONE YET
	MOVNI A,4
	MOVEM A,YET
	MOVE P,[IOWD PDLLEN,PDL];GET STACK
DOIT:	CONSZ 40		;6 OR 10?
	JRST [	MOVE I,TENADR	;10 IS EASY!
		JRST TENWIN]
	TLO 2,777000		;INFINITE PROT.
	DATAO 2			;SET IT
	MOVNS I,2		;GET INDEX
TENWIN:	MOVE PTR,[POINT 7,TEXT]	;BYTE POINTER FOR TEXT
	MOVEI SPACE,40
	MOVE DDB,TAB
	ADDI DDB,(I)
	MOVE DDB,(DDB)
	JUMPE DDB,NODDB
	ADDI DDB,(I)		;ADDRESS OF DDB
	MOVE B,DEVNAM(DDB)	;DEVICE NAME
	PUSHJ P,SIXOUT
	INC 2
	MOVE B,DEVLOG(DDB)
	PUSHJ P,SIXOUT
	INC 2
	MOVE B,DEVCHR(DDB)
	PUSHJ P,OCTPNT
	INC 2
	MOVE B,DEVIOS(DDB)
	PUSHJ P,OCTPNT
	INC 2
	MOVE B,DEVMOD(DDB)
	PUSHJ P,OCTPNT
	MOVEI B,[ASCIZ/

ACTBITS:  /]
	PUSHJ P,STRING
	MOVE B,ACTBTS(DDB)
	PUSHJ P,OCTPNT
	INC 1
	MOVE B,ACTBTS+1(DDB)
	PUSHJ P,OCTPNT
	INC 1
	MOVE B,ACTBTS+2(DDB)
	PUSHJ P,OCTPNT
	INC 1
	MOVE B,ACTBTS+3(DDB)
	PUSHJ P,OCTPNT
	SKIPE FLAG
	JRST NOTIN
	MOVEI B,[ASCIZ/
TISYNC:  /]
	PUSHJ P,STRING
	SKIPL TISYNC(DDB)
	JRST NOTNEG
	PUT "-"
NOTNEG:	MOVM A,TISYNC(DDB)
	PUSHJ P,OCTNUM
	MOVEI B,[ASCIZ/
INPUT BUFFER:
/]
	PUSHJ P,STRING
	MOVEI DAT,TTIBUF(DDB)
	PUSHJ P,BUFPNT
	JRST NOTOUT
NOTIN:	MOVEI B,[ASCIZ/
OUTPUT BUFFER:
/]
	PUSHJ P,STRING
	MOVEI DAT,TTOBUF(DDB)
	PUSHJ P,BUFPNT
NOTOUT:	MOVEI B,[ASCIZ/ 
 
 
/]
	PUSHJ P,STRING
	JRST 2,@[.+1]
	MOVEI A,2(PTR)
	SUBI A,DPYBUF		;CALC WORD COUNT
	MOVEM A,HEAD+1
	MOVEI A,1
	IORM A,@LASTCLOBBERED#
	SETZM 1(PTR)
	MOVEI A,1(PTR)
	MOVEM A,LASTCLOBBERED
	SKIPL NODPY
	DPYOUT HEAD
	CALLI 400024

NODDB:	MOVEI B,[ASCIZ/
****** NO DDB POINTER ******/]
	PUSHJ P,STRING
	JRST NOTOUT
BUFPNT:	MOVE E,DEVCHR(DDB)
	ANDI E,3777
	ADD E,BUF(DAT)
	ADDI E,(I)
	HRRZM E,STOPR#
	MOVE F,PUTR(DAT)
	ADDI F,(I)
	TLZ F,1
	MOVEM F,SPUTR#
	MOVE A,TAKR(DAT)
	ADDI A,(I)
	TLZ A,1
	MOVEM A,STAKR#
	MOVEI C,13
	MOVEI D,14
	MOVEI G,177
	SETZB H,COUNT#
	SKIPL NODPY		;TTY?
	JRST TLOP
	MOVEI C,"$"
	MOVEI D,"%"
TLOP:	IBP F
	HRRZ A,F
	CAML A,STOPR
	JRST [	HRR F,BUF(DAT)
		ADDI F,1(I)
		TLZ F,1
		HRRZ A,SPUTR
		CAIGE A,(F)	;PUTR AT FRONT?
		POPJ P,		;YES!
		JRST .+1]
	LDB A,F
	MOVE B,A
	ANDI B,177
	SKIPG NODPY
	JRST NODD2
	CAIN H,12
	CAIN B,15
	JRST NODD2
	MOVEI H,15
	IDPB H,PTR
	MOVEI H,40
	MOVE B,COUNT
	IDPB H,PTR
	SOJG B,.-1
NODD2:	CAIN H,15
	CAIN A,12
	JRST NODD1
	MOVEI H,12
	IDPB H,PTR
NODD1:	SKIPG NODPY
	JRST NODD3
	CAIE H,15
	CAIE B,12
	JRST NODD3
	MOVEI H,40
	IDPB H,PTR
	MOVEI H,15
	IDPB H,PTR
NODD3:	CAIN B,15
	JRST [	MOVEI H,40
		SKIPN COUNT
		SKIPG NODPY
		CAIA
		IDPB H,PTR
		SETZM COUNT
		JRST .+1]
	TRZE A,200
	IDPB C,PTR
	TRZE A,400
	IDPB D,PTR
	SKIPG NODPY
	JRST NODD
	CAIE A,177
	CAIN A,11
	IDPB G,PTR
NODD:	SKIPE A
	IDPB A,PTR
	MOVE H,A
	CAME F,STAKR
	JRST NOTAKR
	CAIN H,15
	JRST [	MOVEI B,12
		IDPB B,PTR
		SETZ H,
		JRST .+1]
	MOVEI B,[ASCIZ/*** TAKR →→→/]
	PUSHJ P,STRING
	SETZM COUNT
	JRST FIN

NOTAKR:	CAIE H,15
	CAIN H,12
	JRST FIN
	AOS A,COUNT
	CAIG A,80
	JRST FIN
	MOVEI H,15
	IDPB H,PTR
	MOVEI H,12
	IDPB H,PTR
	SETZM COUNT
FIN:	CAME F,SPUTR
	JRST TLOP
	POPJ P,
SIXOUT:	MOVEI C,6
SIX1:	SETZ A,
	LSHC A,6
	ADDI A,40
	IDPB A,PTR
	SOJG C,SIX1
CPOPJ:	POPJ P,

OCTPNT:	MOVEI C,=12
OCT1:	SETZ A,
	LSHC A,3
	ADDI A,60
	IDPB A,PTR
	SOJG C,OCT1
	POPJ P,

OCTNUM:	IDIVI A,10
	HRLM B,(P)
	JUMPE A,.+2
	PUSHJ P,OCTNUM
	HLRZ A,(P)
	ADDI A,60
	IDPB A,PTR
	POPJ P,

STRING:	HRLI B,(<POINT 7,0>)
ST1:	ILDB A,B
	JUMPE A,CPOPJ
	IDPB A,PTR
	JRST ST1

DEFINE CW(C1,B1,C2,B2,C3,B3)
{	<BYTE(8)<B1>,<B2>,<B3>(3)<C1>,<C2>,<C3>>!4	}

DDWRD1:	CW	1,46,2,0,3,1
DDWRD2:	CW	4,0,5,10,5,10

IIIWRD:	BYTE(11)<-1000>,600(3)0,0(2)1,2(4)6

HEAD:	600000,,DPYBUF
	0
DONE:	0
	LINSET

DPYBUF:	0
LINSET:	0
HEADER:	ASCID/
DEVNAM  DEVLOG  DEVCHR        DEVIOS        DEVMOD
/
	1
TEXT:	REPEAT 1000,<1>
BUFEND:	1
	0
END STRT